package code.formal.ch_02;

/**
 * NutritionFacts1类：
 * <p>
 * 共有6个属性，其中前两个是必填的，后四个是可选的。
 * <p>
 * <p>
 * 本例采用了重叠构造器的模式进行实现。
 * <p>
 * 重叠构造器：提供第一个只有必要参数的构造器；
 * 第二个构造器除必要参数外，包含一个可选参数；
 * 第三个构造器除必要参数外，包含两个可选参数；
 * ....依次类推
 * <p>
 * <p>
 * 重叠构造器的缺点：当类含有很多可选属性时，需要提供大量的构造器，增加了代码的书写难度，降低了代码的可读性。
 */
public class NutritionFacts1 {

    private final int servingSize;  //(ml)               必要
    private final int servings;     //(per container)    必要
    private final int calories;     //卡路里              可选
    private final int fat;          //脂肪(g)             可选
    private final int sodium;       //纳 (mg)             可选
    private final int carbohydrate; //碳水化合物 (g)       可选

    public NutritionFacts1(int servingSize, int servings) {
        this(servingSize, servings, 0);
    }

    public NutritionFacts1(int servingSize, int servings, int calories) {
        this(servingSize, servings, 0, 0);
    }

    public NutritionFacts1(int servingSize, int servings, int calories, int fat) {
        this(servingSize, servings, 0, 0, 0);
    }

    public NutritionFacts1(int servingSize, int servings, int calories, int fat, int sodium) {
        this(servingSize, servings, 0, 0, 0, 0);
    }

    public NutritionFacts1(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) {
        this.servingSize = servingSize;
        this.servings = servings;
        this.calories = calories;
        this.fat = fat;
        this.sodium = sodium;
        this.carbohydrate = carbohydrate;
    }


    @Override
    public String toString() {
        return "NutritionFacts1{" +
                "servingSize=" + servingSize +
                ", servings=" + servings +
                ", calories=" + calories +
                ", fat=" + fat +
                ", sodium=" + sodium +
                ", carbohydrate=" + carbohydrate +
                '}';
    }

    public static void main(String[] args) {
        NutritionFacts1 nutritionFacts1 = new NutritionFacts1(12, 232, 12, 3, 2, 147);
        System.out.println(nutritionFacts1);

    }


}
